Cloudflare Tunnel 优选 IP 与 Docker 多服务部署指南
假定你的域名为 your.domain 已经托管在 Cloudflare 上。
1. 架构概述
本方案旨在解决直接连接 Cloudflare Tunnel 速度慢、延迟高的问题。通过 Cloudflare for SaaS 功能,配合 Nginx 反向代理,实现以下目标:
- 网络加速:用户通过“自选 IP”或“第三方优选域名”访问服务。
- 流量穿透:流量经优选线路进入 Cloudflare 边缘,再通过 Tunnel 穿透至内网,无需公网 IP。
- 统一路由:Docker 内部运行 Nginx 作为网关,根据域名将流量分发到不同的容器。
流量路径:
用户 -> 优选 IP/域名 (DNS Only) -> Cloudflare 边缘 -> Tunnel -> Nginx (Docker) -> Code-Server (Docker)
2. Cloudflare 设置 (控制台端)
2.1 修改 Tunnel 回源 (Zero Trust 面板)
我们需要将 Tunnel 指向 Docker 内的 Nginx,而不是直接指向具体的服务。
- 进入 Zero Trust -> Networks -> Tunnels。
- 配置你的 Tunnel,进入 Public Hostname 标签页。
- 删除原有的所有记录。
- 添加一个新的“幕后”回源域名(仅用于 Tunnel 连接,不对外公开):
- Public Hostname:
origin.your.domain(举例) - Service:
http://nginx:80 - 注意:这里填写
nginx是因为 Tunnel 容器和 Nginx 容器在同一个 Docker 网络中,可以直接用容器名访问。
- Public Hostname:
2.2 开启 Cloudflare for SaaS (域名管理面板)
此步骤是为了允许通过“优选 IP”访问 Tunnel。
- 在 Cloudflare 首页选择域名
your.domain。 - 进入 SSL/TLS -> Custom Hostnames。
- 点击 Enable Cloudflare for SaaS (需绑定支付方式,前100个域名免费)。
- 设置回源源站 (Fallback Origin):
- 输入:
origin.your.domain(即步骤 2.1 设置的域名)。 - 点击 Add Fallback Origin,等待状态变为 Active。
- 输入:
2.3 添加自定义主机名 (目标域名)
- 在 Custom Hostnames 页面,点击 Add Custom Hostname。
- 输入你实际要访问的域名:
code.your.domain。 - 验证方式选择 TXT(通常自动通过)。
- 等待状态变为 Active。
2.4 配置 DNS (选择一种方式)
此处决定了用户如何连接到 Cloudflare。
方式一:手动指定优选 IP (A 记录)
适合想要极致控制,自己通过测速工具筛选 IP 的用户。
- 进入 DNS -> Records。
- 添加记录:
- Type:
A - Name:
code - Content:
104.16.x.x(填入你测速筛选出的 IP)。 - Proxy status: DNS Only (灰云) (必须关闭代理)
- Type:
方式二:使用优选 CNAME (CNAME 记录)
适合不想频繁测速,使用第三方维护好的优选线路(如 www.shopify.com)。
寻找优选 CNAME 的网站:
- 进入 DNS -> Records。
- 添加记录:
- Type:
CNAME - Name:
code - Target:
优选域名地址(例如第三方提供的www.shopify.com)。 - Proxy status: DNS Only (灰云) (必须关闭代理)
- Type:
3. Docker 环境配置 (服务器端)
假设所有服务都在 scoobydoo 网络下。
3.1 Docker Compose 示例 (docker-compose.yml)
4. Nginx 动态路由配置
这是实现多服务复用的核心。Nginx 根据 Cloudflare 传递过来的 X-Forwarded-Host 头部判断用户访问的是哪个域名,并转发给对应的 Docker 容器。
文件:nginx.conf
5. 如何添加新服务 (扩展指南)
当你想在 VPS 上部署第二个服务(例如 openlist)并同样使用优选 IP 加速时,只需执行以下步骤:
- 部署容器:
- 启动 openlist 容器,确保加入
scoobydoo网络,设置container_name: openlist。
- 启动 openlist 容器,确保加入
- Cloudflare 配置:
- 在 Custom Hostnames 中添加
openlist.your.domain。 - 在 DNS 中添加
openlist的 A 记录 (或 CNAME 记录) 指向优选地址 (DNS Only)。
- 在 Custom Hostnames 中添加
- Nginx 配置:
-
修改
nginx.conf,在map块中增加一行: -
检查配置:
docker compose exec nginx nginx -t -
重载 Nginx:
docker compose exec nginx nginx -s reload
-
6. 故障排查
- 502 Bad Gateway:
- 检查 Nginx 里的
resolver 127.0.0.11是否已配置。 - 检查
map里的容器名是否与docker ps显示的名称一致。 - 检查 Tunnel 里的 Service 是否指向了
http://nginx:80。
- 检查 Nginx 里的
- Code-Server 频繁断连:
- 如果使用优选 IP (A记录),尝试更换其他 IP。
- 如果使用优选 CNAME,尝试更换其他优选域名提供商,或改回手动 IP 模式。
- 确保 Nginx 配置中保留了
Upgrade和Connection头(WebSocket 配置)。
- SSL 证书错误:
- 在 Custom Hostnames 页面检查该域名的 SSL Status 是否为 Active。如果是 Initializing,请等待片刻。

